package com.zhouyu.exampledesignmoudle.singleton;

/**
 * @Author:zhouyu
 * @create: 11:10 2019/12/21
 * @Description: 静态内部类单例模式
 *  1.一个类的＜clinit＞（）方法是加载—–验证—-解析—–初始化，初始化的是静态变量和静态代码块
 *  2.虚拟机会保证一个类的<clinit>()方法在多线程环境中被正确地加锁、同步
 *  3.由于是静态内部类的形式去创建单例的，故外部无法传递参数进去
 */
public class Singleton {

    static {
        System.out.println("初始化时间:"+System.currentTimeMillis());
    }

    public Singleton() {
    }

    public static Singleton getInstance() {
        return SingletonHolder.singleton;
    }

    private static class SingletonHolder {
        //内部类的初始化不会在加载完之后执行，因为不符合5中初始化条件
        private static  final Singleton singleton=new Singleton();
    }

}
